﻿''' <summary>
''' Esta clase representa a un barco en el tablero
''' </summary>
''' <remarks>Re pre sen ta</remarks>
    Public Class Barco
    Private ReadOnly _idBarco As Integer
    Private ReadOnly _tipo As TipoBarco
    Private _disparosRecibidos As Integer
    Private _orientacion As TipoOrientación
    Private ReadOnly _rotacionImagen As RotateFlipType
    Private ReadOnly _casillas As List(Of Casilla)

    Public Sub New(idBarco As Integer, tipo As TipoBarco)
        _idBarco = idBarco
        _tipo = tipo
        _orientacion = TipoOrientación.Desconocida
        Dim r As Integer = UnRandom(2)
        If r = 1 Then
            _rotacionImagen = RotateFlipType.Rotate90FlipX
        Else
            _rotacionImagen = RotateFlipType.Rotate90FlipNone
        End If
        _casillas = New List(Of Casilla)
    End Sub

    Public ReadOnly Property IDBarco As Integer
        Get
            Return _idBarco
        End Get
    End Property

    Public ReadOnly Property CasillasQueOcupa As Integer
        Get
            Return _tipo
        End Get
    End Property

    Public ReadOnly Property Tipo As TipoBarco
        Get
            Return _tipo
        End Get
    End Property

    Public Property Orientación As TipoOrientación
        Get
            Return _orientacion
        End Get
        Set(ByVal value As TipoOrientación)
            _orientacion = value
        End Set
    End Property

    Public Sub Disparo(c As Casilla)
        If _orientacion = TipoOrientación.Desconocida Then
            Throw New Exception("Te falta código")
        End If
        If _disparosRecibidos = _tipo Then
            Throw New Exception("No puede recibir más disparos que las casillas que ocupa")
        End If
        _disparosRecibidos = _disparosRecibidos + 1
        If EsHundido Then
            For Each ca In _casillas
                ca.ActualizaImagen()
            Next
        End If
        _casillas.Add(c)
    End Sub

    Public ReadOnly Property EsHundido As Boolean
        Get
            Return _disparosRecibidos = _tipo
        End Get
    End Property

    Function Imagen(subParteBarco As Integer) As Image
      Dim img As Image = ImagenDeResources(Tipo, subParteBarco, EsHundido)
        If _orientacion = TipoOrientación.Vertical And _tipo <> TipoBarco.UnaCasilla Then
            img.RotateFlip(_rotacionImagen)
        End If
        Return img
    End Function

End Class
